﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using Domain.Util;

namespace BelDecor.Net.Pages
{
    public partial class Produto : BasePage
    {

        #region EventosPagina
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ValidaSeguranca("Produto");
                PopulaDdlFornecedor();
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            ResetaTela();
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            RadButton btn = ((RadButton)sender);
            int idProduto = 0;
            Domain.Model.Produto produto = null;

            var valid = ValidaProduto();

            if (valid == false)
                return;

            try
            {

                if (!string.IsNullOrEmpty(btn.CommandArgument))
                {
                    idProduto = int.Parse(btn.CommandArgument.ToString());
                }

                if (idProduto > 0)
                {
                    produto = Domain.Model.Produto.SingleOrDefault(f => f.Id_Produto == idProduto);

                    if (produto != null)
                    {
                        SetAtributesProduto(ref produto);
                    }
                    else
                    {
                        RadWindowManager1.RadAlert("Não foi possível encontrar os dados do produto.", 0, 0, "Atenção", "");
                        return;
                    }
                }
                else
                {
                    //inclusão
                    produto = new Domain.Model.Produto();
                    SetAtributesProduto(ref produto);
                }

                produto.Save();

                ResetaTela();
                PopulaGridProduto(txtConsultarNome.Text);
                RadWindowManager1.RadAlert("Operação concluída com sucesso.", 0, 0, "Atenção", "");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            pnlConsultarProduto.Visible = true;
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            codProduto.Visible = false;
            txtCodProduto.Visible = false;
            ConfiguraInclusao();
            pnlConsultarProduto.Visible = false;
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                PopulaGridProduto(txtConsultarNome.Text);
            }
            catch (Exception)
            {
                throw;
            }

        }

        #endregion

        #region Grid

        protected void grdProduto_ItemCommand(object sender, GridCommandEventArgs e)
        {


            int idCli = 0;

            if (e.CommandArgument != "") idCli = int.Parse(e.CommandArgument.ToString());

            if (e.CommandName == "Editar")
            {
                codProduto.Visible = true;
                txtCodProduto.Visible = true;
                PopulaEdicaoProduto(idCli);
            }
            else if (e.CommandName == "Excluir")
            {
                ExcluirProduto(idCli);
            }


            if (e.CommandName == Telerik.Web.UI.RadGrid.ExportToExcelCommandName ||
         e.CommandName == Telerik.Web.UI.RadGrid.ExportToWordCommandName ||
         e.CommandName == Telerik.Web.UI.RadGrid.ExportToCsvCommandName)
            {
                ConfigureExportgrd();
            }



        }


        public void ConfigureExportgrd()
        {
            grdProduto.ExportSettings.ExportOnlyData = true;
            grdProduto.ExportSettings.IgnorePaging = true;
            grdProduto.ExportSettings.OpenInNewWindow = true;
            grdProduto.ExportSettings.FileName = string.Format("Produto_{0}", DateTime.Now.Ticks);
        }
        #endregion

        #region Metodos
        void ConfiguraInclusao()
        {
            pnlIncluirEditar.Visible = true;
            btnSalvar.CommandArgument = string.Empty;
            txtNome.Text = string.Empty;
            //txtAltura.Text = null;
            //txtLargura.Text = null;
            //txtEspessura.Text = null;
            //txtProfundidade.Text = null;
            txtNome.Text = string.Empty;
            txtObs.Text = string.Empty;
            txtCodProduto.Text = string.Empty;
            ddlFornecedor.SelectedIndex = 0;
            //txtCor.Text = string.Empty;

        }

        void ResetaTela()
        {
            pnlIncluirEditar.Visible = false;
            btnSalvar.CommandArgument = string.Empty;

            txtNome.Text = string.Empty;
            //txtAltura.Text = null;
            //txtLargura.Text = null;
            //txtEspessura.Text = null;
            //txtProfundidade.Text = null;
            txtNome.Text = string.Empty;
            txtObs.Text = string.Empty;
            txtCodProduto.Text = string.Empty;
            ddlFornecedor.SelectedIndex = 0;
            //txtCor.Text = string.Empty;
        }

        bool ValidaProduto()
        {
            if (string.IsNullOrEmpty(txtNome.Text))
            {
                RadWindowManager1.RadAlert("Informe o campo Nome.", 0, 0, "Atenção", "");
                pnlIncluirEditar.FocusControl(txtNome);
                //txtNome.Focus();
                return false;
            }

            return true;
        }

        void SetAtributesProduto(ref Domain.Model.Produto produto)
        {
            produto.nome = txtNome.Text;
            //produto.altura = txtAltura.Value;
            //produto.largura = txtLargura.Value;
            //produto.espessura = txtEspessura.Value;
            //produto.profundidade = txtProfundidade.Value;
            //produto.cor = txtCor.Text;
            produto.observacoes = txtObs.Text;

            if (ddlFornecedor.SelectedValue != "0")
            {
                produto.IdFornecedor = int.Parse(ddlFornecedor.SelectedValue);
            }
            else
            {
                produto.IdFornecedor = null;
            }

            if (string.IsNullOrEmpty(produto.codigoProduto))
            {
                produto.codigoProduto = Util.Numerador("codigoProduto");
            }
        }

        void PopulaGridProduto(string nome = "")
        {
            var lstProduto = Domain.Model.VwProduto.All().Where(c =>
                                                            (!string.IsNullOrEmpty(nome.Trim()) ? c.nome.Contains(nome) : true)).ToList();

            grdProduto.DataSource = lstProduto;
            grdProduto.DataBind();
            pnlGridBusca.Visible = true;
        }

        void PopulaDdlFornecedor()
        {
            var lstFornecedor = Domain.Model.Fornecedor.All().ToList();

            ddlFornecedor.Items.Clear();

            ddlFornecedor.Items.Add(new ListItem("Selecione", "0"));


            for (int i = 0; i < lstFornecedor.Count; i++)
            {
                ddlFornecedor.Items.Add(new ListItem(lstFornecedor[i].nome, lstFornecedor[i].Id_fornecedor.ToString()));
            }
        }


        private void ExcluirProduto(int idProduto)
        {
            try
            {
                Domain.Model.Produto.Delete(c => c.Id_Produto == idProduto);
                RadWindowManager1.RadAlert("Operação concluída com sucesso.", 0, 0, "Atenção", "");
                PopulaGridProduto();
            }
            catch (Exception)
            {
                throw;
            }
        }

        private void PopulaEdicaoProduto(int idProduto)
        {
            var pro = Domain.Model.Produto.SingleOrDefault(f => f.Id_Produto == idProduto);
            btnSalvar.CommandArgument = idProduto.ToString();

            if (pro != null)
            {
                txtCodProduto.Text = pro.codigoProduto;
                txtNome.Text = pro.nome;
                //txtAltura.Value = pro.altura;
                //txtLargura.Value = pro.largura;
                //txtEspessura.Value = pro.espessura;
                //txtProfundidade.Value = pro.profundidade;

                if (pro.IdFornecedor > 0)
                {
                    ddlFornecedor.SelectedValue = pro.IdFornecedor.ToString();
                }

                //txtCor.Text = pro.cor;
                txtObs.Text = pro.observacoes;
                pnlIncluirEditar.Visible = true;
            }
        }
        #endregion
    }
}